1. Technical Field of the Invention
The present invention relates to shared memory network architectures, and more particularly, to a method for memory scaling when encountering memory shortages within a node of a software coherent network.
2. Description of Related Art
Distributed shared memory provides an important; compromise between the low cost of distributed memory machines and the convenient paradigm afforded by shared memory multiprocessors. Software shared memory has received much attention for both clusters of uniprocessors and clusters of multiprocessors. Existing designs of coherent shared memories and implementations of software shared memories treat local memory of a node as a third level cache and migrate and replicate shared data in that space. This approach, however, while simplifying the implementation of the coherence protocol results in the unfortunate side effect of preventing the total amount of shared memory available to the application from scaling with the size of the cluster. Adding additional nodes to the cluster increases the computational power of the overall cluster but does not increase the amount of shared memory which is available to the application. A significant number of applications require very large shared memories and while these applications may scale well under software coherence they cannot take full advantage of clustered environments due to memory limitations.
The primary reason behind the lack of memory scaling is that software distributed shared memories have not beer. designed to handle evictions of shared data. This results in the total amount of shared memory available being limited by the amount of memory which can be cached. The amount of memory which can be cached in turn is limited by the amount of memory available on the individual nodes within the cluster.
Race conditions between requests for data and data evictions complicate the coherence protocol. Furthermore, evicting data may completely eliminate it from the system and, therefore, steps must be taken when evicting data to ensure that a copy of the data remains in the system. Finally, evicting data from a node requires the updating of metadata which indicates to other nodes where the application data reside. Such updates need to be extremely efficient in order that they not degrade system performance.